package com.ruoyi.user.mapper;

import java.util.List;
import com.ruoyi.user.domain.UserComplaints;
import org.apache.ibatis.annotations.Param;

/**
 * 用户投诉Mapper接口
 * 
 * @author ruoyi
 * @date 2025-10-21
 */
public interface UserComplaintsMapper 
{
    /**
     * 查询用户投诉
     * 
     * @param complaintId 用户投诉主键
     * @return 用户投诉
     */
    public UserComplaints selectUserComplaintsByComplaintId(String complaintId);

    /**
     * 查询用户投诉列表
     * 
     * @param userComplaints 用户投诉
     * @return 用户投诉集合
     */
    public List<UserComplaints> selectUserComplaintsList(UserComplaints userComplaints);

    /**
     * 新增用户投诉
     * 
     * @param userComplaints 用户投诉
     * @return 结果
     */
    public int insertUserComplaints(UserComplaints userComplaints);

    /**
     * 修改用户投诉
     * 
     * @param userComplaints 用户投诉
     * @return 结果
     */
    public int updateUserComplaints(UserComplaints userComplaints);

    /**
     * 删除用户投诉
     * 
     * @param complaintId 用户投诉主键
     * @return 结果
     */
    public int deleteUserComplaintsByComplaintId(String complaintId);

    /**
     * 批量删除用户投诉
     * 
     * @param complaintIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteUserComplaintsByComplaintIds(String[] complaintIds);

    /**
     * 按用户ID查询其投诉列表
     *
     * @param customerId 用户ID（对应表字段 customer_id）
     * @return 投诉列表
     */
    public List<UserComplaints> selectUserComplaintsListByCustomerId(@Param("customerId") String customerId);

    /**
     * 根据投诉ID与用户ID查询投诉详情（归属校验）
     */
    public UserComplaints selectUserComplaintByIdAndCustomer(@Param("complaintId") String complaintId, @Param("customerId") String customerId);

    /**
     * 根据投诉ID与用户ID软删除（撤销）投诉
     */
    public int softDeleteUserComplaintByIdAndCustomer(@Param("complaintId") String complaintId,
                                                      @Param("customerId") String customerId,
                                                      @Param("deletedAt") java.util.Date deletedAt,
                                                      @Param("updatedAt") java.util.Date updatedAt);
}
